home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / AEDataModel.p < prev    next >
Text File  |  1996-05-01  |  24KB  |  594 lines

  1. {
  2.      File:        AEDataModel.p
  3.  
  4.      Contains:    AppleEvent Data Model Interfaces.
  5.  
  6.      Version:    Technology:    Copland
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT AEDataModel;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __AEDATAMODEL__}
  28. {$SETC __AEDATAMODEL__ := 1}
  29.  
  30. {$I+}
  31. {$SETC AEDataModelIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __MEMORY__}
  38. {$I Memory.p}
  39. {$ENDC}
  40. {$IFC FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED }
  41. {$IFC NOT FOR_PTR_BASED_AE }
  42. {$IFC UNDEFINED __MIXEDMODE__}
  43. {$I MixedMode.p}
  44. {$ENDC}
  45. {$ENDC}
  46. {$ENDC}
  47. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  48. {$IFC UNDEFINED __MEMALLOCATORS__}
  49. {$I MemAllocators.p}
  50. {$ENDC}
  51. {$ENDC}
  52.  
  53. {$PUSH}
  54. {$ALIGN MAC68K}
  55. {$LibExport+}
  56.  
  57.  
  58. CONST
  59.                                                                 {  Apple event descriptor types  }
  60.     typeBoolean                    = 'bool';
  61.     typeChar                    = 'TEXT';                        {  Preferred numeric Apple event descriptor types  }
  62.     typeSInt16                    = 'shor';
  63.     typeSInt32                    = 'long';
  64.     typeUInt32                    = 'magn';
  65.     typeSInt64                    = 'comp';
  66.     typeIEEE32BitFloatingPoint    = 'sing';
  67.     typeIEEE64BitFloatingPoint    = 'doub';
  68.     type128BitFloatingPoint        = 'ldbl';
  69.     typeDecimalStruct            = 'decm';                        {  Non-preferred Apple event descriptor types  }
  70.     typeSMInt                    = 'shor';
  71.     typeShortInteger            = 'shor';
  72.     typeInteger                    = 'long';
  73.     typeLongInteger                = 'long';
  74.     typeMagnitude                = 'magn';
  75.     typeComp                    = 'comp';
  76.     typeSMFloat                    = 'sing';
  77.     typeShortFloat                = 'sing';
  78.     typeFloat                    = 'doub';
  79.     typeLongFloat                = 'doub';
  80.     typeExtended                = 'exte';                        {  More Apple event descriptor types  }
  81.     typeAEList                    = 'list';
  82.     typeAERecord                = 'reco';
  83.     typeAppleEvent                = 'aevt';
  84.     typeEventRecord                = 'evrc';
  85.     typeTrue                    = 'true';
  86.     typeFalse                    = 'fals';
  87.     typeAlias                    = 'alis';
  88.     typeEnumerated                = 'enum';
  89.     typeType                    = 'type';
  90.     typeAppParameters            = 'appa';
  91.     typeProperty                = 'prop';
  92.     typeFSS                        = 'fss ';
  93.     typeKeyword                    = 'keyw';
  94.     typeSectionH                = 'sect';
  95.     typeWildCard                = '****';
  96.     typeApplSignature            = 'sign';
  97.     typeQDRectangle                = 'qdrt';
  98.     typeFixed                    = 'fixd';
  99.     typeSessionID                = 'ssid';
  100.     typeTargetID                = 'targ';
  101.     typeProcessSerialNumber        = 'psn ';
  102.     typeKernelProcessID            = 'kpid';
  103.     typeDispatcherID            = 'dspt';
  104.     typeNull                    = 'null';                        {  null or nonexistent data  }
  105.  
  106. {  Keywords for Apple event attributes  }
  107.     keyTransactionIDAttr        = 'tran';
  108.     keyReturnIDAttr                = 'rtid';
  109.     keyEventClassAttr            = 'evcl';
  110.     keyEventIDAttr                = 'evid';
  111.     keyAddressAttr                = 'addr';
  112.     keyOptionalKeywordAttr        = 'optk';
  113.     keyTimeoutAttr                = 'timo';
  114.     keyInteractLevelAttr        = 'inte';                        {  this attribute is read only - will be set in AESend  }
  115.     keyEventSourceAttr            = 'esrc';                        {  this attribute is read only  }
  116.     keyMissedKeywordAttr        = 'miss';                        {  this attribute is read only  }
  117.     keyOriginalAddressAttr        = 'from';                        {  new in 1.0.1  }
  118.  
  119. {     Constants used for specifying the factoring of AEDescLists.  }
  120.     kAEDescListFactorNone        = 0;
  121.     kAEDescListFactorType        = 4;
  122.     kAEDescListFactorTypeAndSize = 8;
  123.  
  124. {  Constants used creating an AppleEvent  }
  125.                                                                 {  Constant for the returnID param of AECreateAppleEvent  }
  126.     kAutoGenerateReturnID        = -1;                            {  AECreateAppleEvent will generate a session-unique ID  }
  127.                                                                 {  Constant for transaction ID's  }
  128.     kAnyTransactionID            = 0;                            {  no transaction is in use  }
  129.  
  130. {  Apple event manager data types  }
  131.  
  132. TYPE
  133.     DescType                            = ResType;
  134.     AEKeyword                            = FourCharCode;
  135. {$IFC FOR_PTR_BASED_AE }
  136.     AEDescData = ^LONGINT;
  137.     AEDescPtr = ^AEDesc;
  138.     AEDesc = RECORD
  139.         descriptorType:            DescType;
  140.         descriptorData:            AEDescData;
  141.     END;
  142.  
  143. { typedef AEDesc *            AEDescPtr; }
  144. {$ELSEC}
  145.     AEDesc = RECORD
  146.         descriptorType:            DescType;
  147.         dataHandle:                Handle;
  148.     END;
  149.  
  150.     AEDescPtr                            = ^AEDesc;
  151. {$ENDC}
  152.     AEKeyDescPtr = ^AEKeyDesc;
  153.     AEKeyDesc = RECORD
  154.         descKey:                AEKeyword;
  155.         descContent:            AEDesc;
  156.     END;
  157.  
  158. {  a list of AEDesc's is a special kind of AEDesc  }
  159.     AEDescList                            = AEDesc;
  160.     AEDescListPtr                         = ^AEDescList;
  161. {  AERecord is a list of keyworded AEDesc's  }
  162.     AERecord                            = AEDescList;
  163.     AERecordPtr                         = ^AERecord;
  164. {  an AEDesc which contains address data  }
  165.     AEAddressDesc                        = AEDesc;
  166.     AEAddressDescPtr                     = ^AEAddressDesc;
  167. {  an AERecord that contains an AppleEvent, and related data types  }
  168.     AppleEvent                            = AERecord;
  169.     AppleEventPtr                         = ^AppleEvent;
  170.     AEReturnID                            = SInt16;
  171.     AETransactionID                        = SInt32;
  172.     AEEventClass                        = FourCharCode;
  173.     AEEventID                            = FourCharCode;
  174.     AEArrayType                            = SInt8;
  175.  
  176. CONST
  177.     kAEDataArray                = 0;
  178.     kAEPackedArray                = 1;
  179.     kAEDescArray                = 3;
  180.     kAEKeyDescArray                = 4;
  181.  
  182. {$IFC FOR_PTR_BASED_AE }
  183.  
  184. TYPE
  185.     AEArrayDataPtr = ^AEArrayData;
  186.     AEArrayData = RECORD
  187.         CASE INTEGER OF
  188.         0: (
  189.             kAEDataArray:        ARRAY [0..0] OF INTEGER;
  190.             );
  191.         1: (
  192.             kAEPackedArray:        SInt8;
  193.             );
  194.         2: (
  195.             kAEDescArray:        ARRAY [0..0] OF AEDesc;
  196.             );
  197.         3: (
  198.             kAEKeyDescArray:    ARRAY [0..0] OF AEKeyDesc;
  199.             );
  200.     END;
  201.  
  202. {$ELSEC}
  203.     kAEHandleArray                = 2;
  204.  
  205.  
  206. TYPE
  207.     AEArrayData = RECORD
  208.         CASE INTEGER OF
  209.         0: (
  210.             kAEDataArray:        ARRAY [0..0] OF INTEGER;
  211.             );
  212.         1: (
  213.             kAEPackedArray:        SInt8;
  214.             );
  215.         2: (
  216.             kAEHandleArray:        ARRAY [0..0] OF Handle;
  217.             );
  218.         3: (
  219.             kAEDescArray:        ARRAY [0..0] OF AEDesc;
  220.             );
  221.         4: (
  222.             kAEKeyDescArray:    ARRAY [0..0] OF AEKeyDesc;
  223.             );
  224.     END;
  225.  
  226. {$ENDC}
  227.     AEArrayDataPointer                    = ^AEArrayData;
  228.     AEArrayDataPointerPtr                 = ^AEArrayDataPointer;
  229. {
  230. *************************************************************************
  231.   These calls are used to set up and modify the coercion dispatch table.
  232. *************************************************************************
  233. }
  234. {$IFC FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED }
  235. {$IFC NOT FOR_PTR_BASED_AE }
  236.     AECoerceDescProcPtr = ProcPtr;  { FUNCTION AECoerceDesc((CONST)VAR fromDesc: AEDesc; toType: DescType; handlerRefcon: LONGINT; VAR toDesc: AEDesc): OSErr; }
  237.  
  238.     AECoercePtrProcPtr = ProcPtr;  { FUNCTION AECoercePtr(typeCode: DescType; dataPtr: UNIV Ptr; dataSize: Size; toType: DescType; handlerRefcon: LONGINT; VAR result: AEDesc): OSErr; }
  239.  
  240.     AECoerceDescUPP = UniversalProcPtr;
  241.     AECoercePtrUPP = UniversalProcPtr;
  242.  
  243. CONST
  244.     uppAECoerceDescProcInfo = $00003FE0;
  245.     uppAECoercePtrProcInfo = $0003FFE0;
  246.  
  247. FUNCTION NewAECoerceDescProc(userRoutine: AECoerceDescProcPtr): AECoerceDescUPP;
  248.     {$IFC NOT GENERATINGCFM }
  249.     INLINE $2E9F;
  250.     {$ENDC}
  251.  
  252. FUNCTION NewAECoercePtrProc(userRoutine: AECoercePtrProcPtr): AECoercePtrUPP;
  253.     {$IFC NOT GENERATINGCFM }
  254.     INLINE $2E9F;
  255.     {$ENDC}
  256.  
  257. FUNCTION CallAECoerceDescProc({CONST}VAR fromDesc: AEDesc; toType: DescType; handlerRefcon: LONGINT; VAR toDesc: AEDesc; userRoutine: AECoerceDescUPP): OSErr;
  258.     {$IFC NOT GENERATINGCFM}
  259.     INLINE $205F, $4E90;
  260.     {$ENDC}
  261.  
  262. FUNCTION CallAECoercePtrProc(typeCode: DescType; dataPtr: UNIV Ptr; dataSize: Size; toType: DescType; handlerRefcon: LONGINT; VAR result: AEDesc; userRoutine: AECoercePtrUPP): OSErr;
  263.     {$IFC NOT GENERATINGCFM}
  264.     INLINE $205F, $4E90;
  265.     {$ENDC}
  266.  
  267. TYPE
  268.     AECoercionHandlerUPP                = UniversalProcPtr;
  269. FUNCTION AEInstallCoercionHandler(fromType: DescType; toType: DescType; handler: AECoercionHandlerUPP; handlerRefcon: LONGINT; fromTypeIsDesc: BOOLEAN; isSysHandler: BOOLEAN): OSErr;
  270.     {$IFC NOT GENERATINGCFM}
  271.     INLINE $303C, $0A22, $A816;
  272.     {$ENDC}
  273. FUNCTION AERemoveCoercionHandler(fromType: DescType; toType: DescType; handler: AECoercionHandlerUPP; isSysHandler: BOOLEAN): OSErr;
  274.     {$IFC NOT GENERATINGCFM}
  275.     INLINE $303C, $0723, $A816;
  276.     {$ENDC}
  277. FUNCTION AEGetCoercionHandler(fromType: DescType; toType: DescType; VAR handler: AECoercionHandlerUPP; VAR handlerRefcon: LONGINT; VAR fromTypeIsDesc: BOOLEAN; isSysHandler: BOOLEAN): OSErr;
  278.     {$IFC NOT GENERATINGCFM}
  279.     INLINE $303C, $0B24, $A816;
  280.     {$ENDC}
  281. {$ENDC}
  282. {$ENDC}
  283. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  284. {$IFC FOR_PTR_BASED_AE }
  285.  
  286. TYPE
  287.     AECoercionProc = ProcPtr;  { FUNCTION AECoercionProc(typeCode: DescType; dataPtr: UNIV Ptr; dataSize: ByteCount; toType: DescType; handlerRefcon: UNIV Ptr; VAR result: AEDesc): OSStatus; C; }
  288.  
  289. FUNCTION AEInstallCoercion(fromType: DescType; toType: DescType; handler: AECoercionProc; handlerRefcon: UNIV Ptr): OSStatus; C;
  290. FUNCTION AERemoveCoercion(fromType: DescType; toType: DescType; handler: AECoercionProc): OSStatus; C;
  291. FUNCTION AEGetCoercion(fromType: DescType; toType: DescType; VAR handler: AECoercionProc; VAR handlerRefcon: UNIV Ptr): OSStatus; C;
  292. {$ENDC}
  293. {$ENDC}
  294. {
  295. *************************************************************************
  296.   The following calls provide for a coercion interface.
  297. *************************************************************************
  298. }
  299. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  300. FUNCTION AECoercePtr(typeCode: DescType; dataPtr: UNIV Ptr; dataSize: Size; toType: DescType; VAR result: AEDesc): OSErr;
  301.     {$IFC NOT GENERATINGCFM}
  302.     INLINE $303C, $0A02, $A816;
  303.     {$ENDC}
  304. FUNCTION AECoerceDesc({CONST}VAR theAEDesc: AEDesc; toType: DescType; VAR result: AEDesc): OSErr;
  305.     {$IFC NOT GENERATINGCFM}
  306.     INLINE $303C, $0603, $A816;
  307.     {$ENDC}
  308. {$ENDC}
  309. {
  310. *************************************************************************
  311.  The following calls apply to any AEDesc. Every 'result' descriptor is
  312.  created for you, so you will be responsible for memory management
  313.  (including disposing) of the descriptors so created.  
  314. *************************************************************************
  315. }
  316. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  317. FUNCTION AECreateDesc(typeCode: DescType; dataPtr: UNIV Ptr; dataSize: Size; VAR result: AEDesc): OSErr;
  318.     {$IFC NOT GENERATINGCFM}
  319.     INLINE $303C, $0825, $A816;
  320.     {$ENDC}
  321. FUNCTION AEDisposeDesc(VAR theAEDesc: AEDesc): OSErr;
  322.     {$IFC NOT GENERATINGCFM}
  323.     INLINE $303C, $0204, $A816;
  324.     {$ENDC}
  325. FUNCTION AEDuplicateDesc({CONST}VAR theAEDesc: AEDesc; VAR result: AEDesc): OSErr;
  326.     {$IFC NOT GENERATINGCFM}
  327.     INLINE $303C, $0405, $A816;
  328.     {$ENDC}
  329. {$ENDC}
  330. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  331. {$IFC FOR_PTR_BASED_AE }
  332. FUNCTION AEClearDesc(VAR descToClear: AEDesc): OSStatus; C;
  333. FUNCTION AEDescIsNull({CONST}VAR desc: AEDesc): BOOLEAN; C;
  334. FUNCTION AESizeOfDescData({CONST}VAR desc: AEDesc; VAR descriptorType: DescType; VAR dataSize: ByteCount): OSStatus; C;
  335. FUNCTION AEGetDescData({CONST}VAR desc: AEDesc; VAR typeCode: DescType; dataBuffer: UNIV Ptr; maximumSize: ByteCount; VAR actualSize: ByteCount): OSStatus; C;
  336. {$ENDC}
  337. {$ENDC}
  338. {
  339. *************************************************************************
  340.   The following calls apply to AEDescList. Since AEDescList is a subtype of
  341.   AEDesc, the calls in the previous section can also be used for AEDescList.
  342.   All list and array indices are 1-based. If the data was greater than
  343.   maximumSize in the routines below, then actualSize will be greater than
  344.   maximumSize, but only maximumSize bytes will actually be retrieved.
  345. *************************************************************************
  346. }
  347. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  348. FUNCTION AECreateList(factoringPtr: UNIV Ptr; factoredSize: Size; isRecord: BOOLEAN; VAR resultList: AEDescList): OSErr;
  349.     {$IFC NOT GENERATINGCFM}
  350.     INLINE $303C, $0706, $A816;
  351.     {$ENDC}
  352. FUNCTION AECountItems({CONST}VAR theAEDescList: AEDescList; VAR theCount: LONGINT): OSErr;
  353.     {$IFC NOT GENERATINGCFM}
  354.     INLINE $303C, $0407, $A816;
  355.     {$ENDC}
  356. FUNCTION AEPutPtr(VAR theAEDescList: AEDescList; index: LONGINT; typeCode: DescType; dataPtr: UNIV Ptr; dataSize: Size): OSErr;
  357.     {$IFC NOT GENERATINGCFM}
  358.     INLINE $303C, $0A08, $A816;
  359.     {$ENDC}
  360. FUNCTION AEPutDesc(VAR theAEDescList: AEDescList; index: LONGINT; {CONST}VAR theAEDesc: AEDesc): OSErr;
  361.     {$IFC NOT GENERATINGCFM}
  362.     INLINE $303C, $0609, $A816;
  363.     {$ENDC}
  364. FUNCTION AEGetNthPtr({CONST}VAR theAEDescList: AEDescList; index: LONGINT; desiredType: DescType; VAR theAEKeyword: AEKeyword; VAR typeCode: DescType; dataPtr: UNIV Ptr; maximumSize: Size; VAR actualSize: Size): OSErr;
  365.     {$IFC NOT GENERATINGCFM}
  366.     INLINE $303C, $100A, $A816;
  367.     {$ENDC}
  368. FUNCTION AEGetNthDesc({CONST}VAR theAEDescList: AEDescList; index: LONGINT; desiredType: DescType; VAR theAEKeyword: AEKeyword; VAR result: AEDesc): OSErr;
  369.     {$IFC NOT GENERATINGCFM}
  370.     INLINE $303C, $0A0B, $A816;
  371.     {$ENDC}
  372. FUNCTION AESizeOfNthItem({CONST}VAR theAEDescList: AEDescList; index: LONGINT; VAR typeCode: DescType; VAR dataSize: Size): OSErr;
  373.     {$IFC NOT GENERATINGCFM}
  374.     INLINE $303C, $082A, $A816;
  375.     {$ENDC}
  376. FUNCTION AEGetArray({CONST}VAR theAEDescList: AEDescList; arrayType: AEArrayType; arrayPtr: AEArrayDataPointer; maximumSize: Size; VAR itemType: DescType; VAR itemSize: Size; VAR itemCount: LONGINT): OSErr;
  377.     {$IFC NOT GENERATINGCFM}
  378.     INLINE $303C, $0D0C, $A816;
  379.     {$ENDC}
  380. FUNCTION AEPutArray(VAR theAEDescList: AEDescList; arrayType: AEArrayType; {CONST}VAR arrayPtr: AEArrayData; itemType: DescType; itemSize: Size; itemCount: LONGINT): OSErr;
  381.     {$IFC NOT GENERATINGCFM}
  382.     INLINE $303C, $0B0D, $A816;
  383.     {$ENDC}
  384. FUNCTION AEDeleteItem(VAR theAEDescList: AEDescList; index: LONGINT): OSErr;
  385.     {$IFC NOT GENERATINGCFM}
  386.     INLINE $303C, $040E, $A816;
  387.     {$ENDC}
  388. {$ENDC}
  389. {
  390. *************************************************************************
  391.  The following calls apply to AERecord. Since AERecord is a subtype of
  392.  AEDescList, the calls in the previous sections can also be used for
  393.  AERecord an AERecord can be created by using AECreateList with isRecord
  394.  set to true. 
  395. *************************************************************************
  396. }
  397. {
  398.   Note: none of the ``key'' calls were available in the PowerPC 7.x IntefaceLib.
  399.   In C, a #define is used to map ``key'' calls to ``param'' calls.  In pascal
  400.   this mapping is done in externally linked glue code.
  401. }
  402. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  403. FUNCTION AEPutKeyPtr(VAR theAERecord: AERecord; theAEKeyword: AEKeyword; typeCode: DescType; dataPtr: UNIV Ptr; dataSize: Size): OSErr;
  404.     {$IFC NOT GENERATINGCFM}
  405.     INLINE $303C, $0A0F, $A816;
  406.     {$ENDC}
  407. FUNCTION AEPutKeyDesc(VAR theAERecord: AERecord; theAEKeyword: AEKeyword; {CONST}VAR theAEDesc: AEDesc): OSErr;
  408.     {$IFC NOT GENERATINGCFM}
  409.     INLINE $303C, $0610, $A816;
  410.     {$ENDC}
  411. FUNCTION AEGetKeyPtr({CONST}VAR theAERecord: AERecord; theAEKeyword: AEKeyword; desiredType: DescType; VAR typeCode: DescType; dataPtr: UNIV Ptr; maximumSize: Size; VAR actualSize: Size): OSErr;
  412.     {$IFC NOT GENERATINGCFM}
  413.     INLINE $303C, $0E11, $A816;
  414.     {$ENDC}
  415. FUNCTION AEGetKeyDesc({CONST}VAR theAERecord: AERecord; theAEKeyword: AEKeyword; desiredType: DescType; VAR result: AEDesc): OSErr;
  416.     {$IFC NOT GENERATINGCFM}
  417.     INLINE $303C, $0812, $A816;
  418.     {$ENDC}
  419. FUNCTION AESizeOfKeyDesc({CONST}VAR theAERecord: AERecord; theAEKeyword: AEKeyword; VAR typeCode: DescType; VAR dataSize: Size): OSErr;
  420.     {$IFC NOT GENERATINGCFM}
  421.     INLINE $303C, $0829, $A816;
  422.     {$ENDC}
  423. FUNCTION AEDeleteKeyDesc(VAR theAERecord: AERecord; theAEKeyword: AEKeyword): OSErr;
  424.     {$IFC NOT GENERATINGCFM}
  425.     INLINE $303C, $0413, $A816;
  426.     {$ENDC}
  427. {$ENDC}
  428. {$IFC FOR_SYSTEM7_ONLY }
  429. {
  430.   Note: The following #defines map ``key'' calls on AERecords into ``param'' calls on 
  431.   AppleEvents.  Although no errors are currently returned if AERecords are 
  432.   passed to ``param'' calls and AppleEvents to ``key'' calls, the behavior of 
  433.   this type of API-mixing is not explicitly documented in Inside Macintosh.  
  434.   It just happens that the ``key'' calls have the same functionality as their 
  435.   ``param'' counterparts.  Since none of the ``key'' calls are currently available 
  436.   in the PowerPC IntefaceLib, the #defines exploit the fact that ``key'' and 
  437.   ``param'' routines can be used interchangeably, and makes sure that every 
  438.   invokation of a ``key'' API becomes an invokation of a ``param'' API.
  439. }
  440. {$ENDC}
  441. {
  442. *************************************************************************
  443.   The following calls create and manipulate the AppleEvent data type.
  444. *************************************************************************
  445. }
  446. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  447. FUNCTION AECreateAppleEvent(theAEEventClass: AEEventClass; theAEEventID: AEEventID; {CONST}VAR target: AEAddressDesc; returnID: AEReturnID; transactionID: AETransactionID; VAR result: AppleEvent): OSErr;
  448.     {$IFC NOT GENERATINGCFM}
  449.     INLINE $303C, $0B14, $A816;
  450.     {$ENDC}
  451. {$ENDC}
  452. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  453. {$IFC FOR_PTR_BASED_AE }
  454. FUNCTION AECustomCreateAppleEvent(theAEEventClass: AEEventClass; theAEEventID: AEEventID; {CONST}VAR target: AEAddressDesc; returnID: AEReturnID; transactionID: AETransactionID; allocator: MemAllocatorRef; VAR result: AppleEvent): OSStatus; C;
  455. FUNCTION AECreateReplyAppleEvent({CONST}VAR replyAddress: AEAddressDesc; allocator: MemAllocatorRef; VAR result: AppleEvent): OSStatus; C;
  456. {$ENDC}
  457. {$ENDC}
  458. {
  459. *************************************************************************
  460.   The following calls are used to pack and unpack parameters from records
  461.   of type AppleEvent. Since AppleEvent is a subtype of AERecord, the calls
  462.   in the previous sections can also be used for variables of type
  463.   AppleEvent. The next six calls are in fact identical to the six calls
  464.   for AERecord.
  465. *************************************************************************
  466. }
  467. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  468. FUNCTION AEPutParamPtr(VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; typeCode: DescType; dataPtr: UNIV Ptr; dataSize: Size): OSErr;
  469.     {$IFC NOT GENERATINGCFM}
  470.     INLINE $303C, $0A0F, $A816;
  471.     {$ENDC}
  472. FUNCTION AEPutParamDesc(VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; {CONST}VAR theAEDesc: AEDesc): OSErr;
  473.     {$IFC NOT GENERATINGCFM}
  474.     INLINE $303C, $0610, $A816;
  475.     {$ENDC}
  476. FUNCTION AEGetParamPtr({CONST}VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; desiredType: DescType; VAR typeCode: DescType; dataPtr: UNIV Ptr; maximumSize: Size; VAR actualSize: Size): OSErr;
  477.     {$IFC NOT GENERATINGCFM}
  478.     INLINE $303C, $0E11, $A816;
  479.     {$ENDC}
  480. FUNCTION AEGetParamDesc({CONST}VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; desiredType: DescType; VAR result: AEDesc): OSErr;
  481.     {$IFC NOT GENERATINGCFM}
  482.     INLINE $303C, $0812, $A816;
  483.     {$ENDC}
  484. FUNCTION AESizeOfParam({CONST}VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; VAR typeCode: DescType; VAR dataSize: Size): OSErr;
  485.     {$IFC NOT GENERATINGCFM}
  486.     INLINE $303C, $0829, $A816;
  487.     {$ENDC}
  488. FUNCTION AEDeleteParam(VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword): OSErr;
  489.     {$IFC NOT GENERATINGCFM}
  490.     INLINE $303C, $0413, $A816;
  491.     {$ENDC}
  492. {$ENDC}
  493. {
  494. *************************************************************************
  495.  The following calls also apply to type AppleEvent. Message attributes are
  496.  far more restricted, and can only be accessed through the following 5
  497.  calls. The various list and record routines cannot be used to access the
  498.  attributes of an event. 
  499. *************************************************************************
  500. }
  501. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  502. FUNCTION AEGetAttributePtr({CONST}VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; desiredType: DescType; VAR typeCode: DescType; dataPtr: UNIV Ptr; maximumSize: Size; VAR actualSize: Size): OSErr;
  503.     {$IFC NOT GENERATINGCFM}
  504.     INLINE $303C, $0E15, $A816;
  505.     {$ENDC}
  506. FUNCTION AEGetAttributeDesc({CONST}VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; desiredType: DescType; VAR result: AEDesc): OSErr;
  507.     {$IFC NOT GENERATINGCFM}
  508.     INLINE $303C, $0826, $A816;
  509.     {$ENDC}
  510. FUNCTION AESizeOfAttribute({CONST}VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; VAR typeCode: DescType; VAR dataSize: Size): OSErr;
  511.     {$IFC NOT GENERATINGCFM}
  512.     INLINE $303C, $0828, $A816;
  513.     {$ENDC}
  514. FUNCTION AEPutAttributePtr(VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; typeCode: DescType; dataPtr: UNIV Ptr; dataSize: Size): OSErr;
  515.     {$IFC NOT GENERATINGCFM}
  516.     INLINE $303C, $0A16, $A816;
  517.     {$ENDC}
  518. FUNCTION AEPutAttributeDesc(VAR theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; {CONST}VAR theAEDesc: AEDesc): OSErr;
  519.     {$IFC NOT GENERATINGCFM}
  520.     INLINE $303C, $0627, $A816;
  521.     {$ENDC}
  522. {$ENDC}
  523. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  524. {$IFC FOR_PTR_BASED_AE }
  525. {
  526. *************************************************************************
  527.   These calls are used to convert AEDescs into a "flattened", canonical 
  528.   form and back again.
  529. *************************************************************************
  530. }
  531. FUNCTION AEConvertDescToAEDF({CONST}VAR descriptor: AEDesc; dataBuffer: UNIV Ptr; maximumSize: ByteCount; VAR actualSize: ByteCount): OSStatus; C;
  532. FUNCTION AEConvertAEDFToDesc(dataBuffer: UNIV Ptr; bufferSize: ByteCount; VAR result: AEDesc): OSStatus; C;
  533. FUNCTION AEConvertAEDFToAppleEvent(eventClass: AEEventClass; eventID: AEEventID; {CONST}VAR target: AEAddressDesc; returnID: AEReturnID; transactionID: AETransactionID; dataBuffer: UNIV Ptr; bufferSize: ByteCount; allocator: MemAllocatorRef; VAR result: AppleEvent): OSStatus; C;
  534. {
  535. *************************************************************************
  536.   The following calls apply to AEStreams.  Once a AEStream has been 
  537.   fully written, it may be converted to an AEDesc, AEDescList or AERecord
  538.   to be used by the various other routines listed above.
  539. *************************************************************************
  540. }
  541.  
  542. TYPE
  543.     AEStream = ^LONGINT;
  544. FUNCTION AECreateStream(allocator: MemAllocatorRef; VAR newStream: AEStream): OSStatus; C;
  545. FUNCTION AECreateStreamToAppendDescList({CONST}VAR source: AEDescList; allocator: MemAllocatorRef; VAR newStream: AEStream): OSStatus; C;
  546. FUNCTION AEDisposeStream(deadStream: AEStream): OSStatus; C;
  547. FUNCTION AEWriteStreamKey(stream: AEStream; keyword: AEKeyword): OSStatus; C;
  548. FUNCTION AEWriteStreamPtr(stream: AEStream; dataPtr: UNIV Ptr; dataSize: ByteCount): OSStatus; C;
  549. FUNCTION AEWriteStreamDesc(stream: AEStream; dataType: DescType; dataPtr: UNIV Ptr; dataSize: ByteCount): OSStatus; C;
  550. FUNCTION AEWriteStreamAEDesc(stream: AEStream; {CONST}VAR desc: AEDesc): OSStatus; C;
  551. FUNCTION AEOpenStreamDesc(stream: AEStream; descriptorType: DescType): OSStatus; C;
  552. FUNCTION AEOpenStreamList(stream: AEStream; factorData: UNIV Ptr; factorSize: ByteCount; isRecord: BOOLEAN): OSStatus; C;
  553. FUNCTION AECloseStreamDesc(stream: AEStream): OSStatus; C;
  554. FUNCTION AEConvertStreamToDesc(stream: AEStream; VAR desc: AEDesc): OSStatus; C;
  555. FUNCTION AEConvertStreamToAEDF(stream: AEStream; dataBuffer: UNIV Ptr; maximumSize: ByteCount; VAR actualSize: ByteCount): OSStatus; C;
  556. FUNCTION AEConvertStreamToAppleEvent(eventClass: AEEventClass; eventID: AEEventID; {CONST}VAR target: AEAddressDesc; returnID: AEReturnID; transactionID: AETransactionID; stream: AEStream; allocator: MemAllocatorRef; VAR result: AppleEvent): OSStatus; C;
  557. {
  558. *************************************************************************
  559.   The following calls apply to AESubDescs.  AESubDescs provide an efficient
  560.   way to traverse recursive AERecords and AEDescLists.
  561. *************************************************************************
  562. }
  563.  
  564. TYPE
  565.     OpaqueAESubDescPtr = ^OpaqueAESubDesc;
  566.     OpaqueAESubDesc = RECORD
  567.         reserved:                ARRAY [0..7] OF UInt32;
  568.     END;
  569.  
  570.     AESubDesc                            = OpaqueAESubDesc;
  571.     AESubDescPtr                         = ^AESubDesc;
  572. FUNCTION AEConvertDescToSubDesc({CONST}VAR desc: AEDesc; VAR newSubDesc: AESubDesc): OSStatus; C;
  573. FUNCTION AEConvertSubDescToDesc({CONST}VAR subDesc: AESubDesc; desiredType: DescType; VAR desc: AEDesc): OSStatus; C;
  574. FUNCTION AEConvertAppleEventAttributesToSubDesc({CONST}VAR event: AppleEvent; VAR subDesc: AESubDesc): OSStatus; C;
  575. FUNCTION AESubDescIsListOrRecord({CONST}VAR subDesc: AESubDesc): BOOLEAN; C;
  576. FUNCTION AEGetSubDescData({CONST}VAR subDesc: AESubDesc; dataPtr: UNIV Ptr; bufferSize: ByteCount; VAR actualSize: ByteCount): OSStatus; C;
  577. FUNCTION AESetSubDescData({CONST}VAR subDesc: AESubDesc; dataPtr: UNIV Ptr; sizePtr: ByteCount): OSStatus; C;
  578. FUNCTION AEGetSubDescFactorData({CONST}VAR subDesc: AESubDesc; factorData: UNIV Ptr; bufferSize: ByteCount; VAR actualSize: ByteCount): OSStatus; C;
  579. FUNCTION AECountSubDescItems({CONST}VAR subDesc: AESubDesc; VAR items: ItemCount): OSStatus; C;
  580. FUNCTION AEGetNthSubDesc({CONST}VAR subDesc: AESubDesc; item: ItemCount; VAR keyword: AEKeyword; VAR newSubDesc: AESubDesc): OSStatus; C;
  581. FUNCTION AEGetKeySubDesc({CONST}VAR subDesc: AESubDesc; keyword: AEKeyword; VAR newSubDesc: AESubDesc): OSStatus; C;
  582. {$ENDC}
  583. {$ENDC}
  584. {$ALIGN RESET}
  585. {$POP}
  586.  
  587. {$SETC UsingIncludes := AEDataModelIncludes}
  588.  
  589. {$ENDC} {__AEDATAMODEL__}
  590.  
  591. {$IFC NOT UsingIncludes}
  592.  END.
  593. {$ENDC}
  594.